package com.lzh.others.basejava.Thread_21.bilibili_course_thread;

import com.lzh.others.basejava.Thread_21.utils.SmallTool;

import java.util.concurrent.CompletableFuture;

/**
 * @Description: 场景4：
 * 小白给钱，要求服务员开发票，此时小白接电话，准备回去和朋友开黑打游戏，
 * 刚打完电话，服务员把发票送过来了，然后小白离开，回家。
 * @Author: LiuZiHao
 * @Date: 2023/1/3 10:03
 */
public class CompletableFuturePrac_04 {
    public static void main(String[] args) {
        SmallTool.printTimeAndThread("小白吃好了");
        SmallTool.printTimeAndThread("小白 结账 要求开发票");

        CompletableFuture<String> invoice = CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndThread("服务员收款 500元");
            SmallTool.sleepMillis(100);
            return "500元发票";
        }).thenApplyAsync(money -> {
            SmallTool.printTimeAndThread(String.format("服务员开发票 面额 %s元", money));
            SmallTool.sleepMillis(200);
            return String.format("%s元发票", money);
        });

        SmallTool.printTimeAndThread("小白 接到朋友的电话，想一起打游戏");

        SmallTool.printTimeAndThread(String.format("小白拿到%s,准备回家", invoice.join()));
    }
}
